<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class GoodsActionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function getAdd()
    {   //将所有的商品列出来以便选择添加到活动列表
        $goodsact = DB::table('tbl_goods')->select('id','goodsname')->get();
        // dd($goodsact);
        return view('admin.goodsaction.add',['goodsact'=>$goodsact]);
    }

    public function postDoadd(Request $request)
    {
      $data = $request -> all();
      if(!empty($data['actionpic'])){
       
        //获取上传文件的后缀
        $ext = $request -> file('actionpic') -> getClientOriginalExtension();
        //随机生成一个文件前缀名字
        $filename = date('Ymd',time()).mt_rand(10000,99999);
        //前缀后缀拼接成最后新的文件名称
        $newfilename = $filename.'.'.$ext;
        //上传文件到指定目录
        $request -> file('actionpic') -> move('home_assoc/images/',$newfilename);
        //获取上传文件的长宽
        $arr = getimagesize('home_assoc/images/'.$newfilename);
        $width = $arr[0];
        $height = $arr[1];
        //根据指定大小来进行缩放处理
        self::suofang('home_assoc/images/'.$newfilename,394,418,$pre = 'actionpic_');
        //缩放完成后删除上传的原图片
        unlink('home_assoc/images/'.$newfilename);
        //最后需要存储到数据库的图片名字
        $actionpic = 'actionpic_'.$newfilename;

       }else{
            $actionpic = 'default.jpg';
       }

       $data = $request -> except('_token');
       $data['actionpic'] = $actionpic;
       $data['actiontime'] = date('Y-m-d H:i:s',time());
       //将需要的数据插入数据库
       $res = DB::table('tbl_goodsaction') -> insert($data);
       //验证必填选项
       $this->validate($request, [
        'actionname' => 'required',
        'actiondes' => 'required',
        'actionpic' => 'required',
        ],[
        'actionname.required'=>'商品名称不能为空',
        'actiondes.required'=>'商品描述不能为空',
        'actionpic.required'=>'商品展示图片不能为空',

        ]);

       //进行判断 如果插入成功则进入到列表查看；如果失败则回到之前界面
       if($res){
            return redirect('/admin/goodsaction/list')->with('success','添加成功');
       }else{
            return back()->with('error','添加失败');
       }
    }





    public function getList(Request $request)
    {
        $count = $request ->input('count',10);
        $search = $request->input('search','');

        $data = DB::table('tbl_goodsaction') -> where('actionname','like','%'.$search.'%') ->paginate($count);
        return view('admin.goodsaction.list',['data'=> $data,'request'=>$request->all()]);
    }

    public function getDelete($id){
         $res = DB::table('tbl_goodsaction')->where('id',$id)->delete();
         if($res){
             return redirect('/admin/goodsaction/list')->with('success','删除成功');
         }else{
             return redirect('/admin/goodsaction/list')->with('error','删除失败');
         }
    }

    public function getEdit($id){
       $data = DB::table('tbl_goodsaction') -> where('id',$id)->first();
       $goodsgid = DB::table('tbl_goods')->lists('id');
       return view('admin.goodsaction.update',['data'=>$data,'goodsgid'=>$goodsgid]);
    }

    public function postUpdate(Request $request)
    {

        $data = $request -> except('_token');
       //先判断图片是否上传 进行上传图片的处理 缩放 160*160
       if(!empty($data['actionpic'])){
            //获取上传文件的后缀
            $ext = $request -> file('actionpic') -> getClientOriginalExtension();
            //随机生成一个文件前缀名字
            $filename = date('Ymd',time()).mt_rand(10000,99999);
            //前缀后缀拼接成最后新的文件名称
            $newfilename = $filename.'.'.$ext;
            //上传文件到指定目录
            $request -> file('actionpic') -> move('home_assoc/images/',$newfilename);
            //获取上传文件的长宽
            $arr = getimagesize('home_assoc/images/'.$newfilename);
            $width = $arr[0];
            $height = $arr[1];
            //根据指定大小来进行缩放处理
            self::suofang('home_assoc/images/'.$newfilename,394,418,$pre = 'actionpic_');
            //缩放完成后删除上传的原图片
            unlink('home_assoc/images/'.$newfilename);
            //最后需要存储到数据库的图片名字
            $goodspic = 'actionpic_'.$newfilename;
           }else{
            //将为对应的数据库图片查询出来
                $s = DB::table('tbl_goodsaction')
                            ->where('id',$data['id'])
                            ->first();
                $goodspic = $s['actionpic'];
           }

           $data['actionpic'] = $goodspic;
           $data['actiontime'] = date('Y-m-d H:i:s',time());
           //将接受到的的数据修改进数据库
           $res = DB::table('tbl_goodsaction')
                ->where('id',$data['id'])
                ->update($data);
       //进行判断 如果插入成功则进入到列表查看；如果失败则回到之前界面
       if($res){
            return redirect('/admin/goodsaction/list')->with('success','更新成功');
       }else{
            return back()->with('error','更新失败');
       }
    }

    /**
     * 等比缩放函数（以保存的方式实现）
     * @param string $picname 被缩放的处理图片源
     * @param int $maxx 缩放后图片的最大宽度
     * @param int $maxy 缩放后图片的最大高度
     * @param string $pre 缩放后图片名的前缀名
     * @return String 返回后的图片名称(带路径)；
     */
    static function suofang($picname,$maxx=126,$maxy=66,$pre="pic_")
    {
        $info = getimageSize($picname); //获取图片的基本信息
    
        $w = $info[0];//获取宽度
        $h = $info[1];//获取高度
        
        //获取图片的类型并为此创建对应图片资源    
        switch($info[2]){
            case 1: //gif
                $im = imagecreatefromgif($picname);
                break;
            case 2: //jpg
                $im = imagecreatefromjpeg($picname);
                break;
            case 3: //png
                $im = imagecreatefrompng($picname);
                break;
            default:
                die("图片类型错误！");
        }
        
        //计算缩放比例
            if(($maxx/$w)>($maxy/$h)){
                $b = $maxy/$h;
            }else{
                $b = $maxx/$w;
            }
        
        //计算出缩放后的尺寸
            $nw = floor($w*$b);
            $nh = floor($h*$b);
            
            //创建一个新的图像源(目标图像)
            $nim = imagecreatetruecolor($nw,$nh);
                
            //执行等比缩放
            imagecopyresampled($nim,$im,0,0,0,0,$nw,$nh,$w,$h);
            
            //输出图像（根据源图像的类型，输出为对应的类型）
            $picinfo = pathinfo($picname);//解析源图像的名字和路径信息
            $newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
            switch($info[2]){
                case 1:
                    imagegif($nim,$newpicname);
                    break;
                case 2:
                    imagejpeg($nim,$newpicname);
                    break;
                case 3:
                    imagepng($nim,$newpicname);
                    break;
        }
            //释放图片资源
            imagedestroy($im);
            imagedestroy($nim);
            //返回结果
            return $newpicname;
    }
    
}
